██████╗ ███████╗████████╗██╗██████╗ ███████╗██████╗ ██╗ █████╗
██╔══██╗██╔════╝╚══██╔══╝██║██╔══██╗██╔════╝██╔══██╗██║██╔══██╗
██████╔╝█████╗ ██║ ██║██████╔╝█████╗ ██║ ██║██║███████║
██╔══██╗██╔══╝ ██║ ██║██╔═══╝ ██╔══╝ ██║ ██║██║██╔══██║
██║ ██║███████╗ ██║ ██║██║ ███████╗██████╔╝██║██║ ██║
╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝╚═╝ ╚══════╝╚═════╝ ╚═╝╚═╝ ╚═╝
- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
GOTO
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
top
(inglese)
«Code that relies on goto statements is generally harder to understand and to maintain than code without gotos. Although we are not dogmatic about the matter, it does seem that goto statements should be used rarely, if at all.»
(italiano)
«Il codice che utilizza istruzioni goto è generalmente più difficile da capire e da gestire rispetto al codice senza goto. Anche se non siamo dogmatici riguardo alla questione, risulta che gli statement goto debbano essere usati raramente, se non per niente.»
(Brian Kernighan & Dennis Ritchie, The C Programming Language)
In mwbqinformatica, mwbgGO TO o mwbwGOTO (mwcalett. "vai a") è un'mwcqistruzione di mwcgcontrollo di flusso di mwcwesecuzione. Essa è prevista in vari mwdalinguaggi di programmazione e consente di effettuare salti incondizionati da un punto all'altro del mwdqcodice. In passato veniva spesso impiegata, tuttavia il suo utilizzo risultava spesso improprio, rendendo illeggibile o di difficile comprensione un mwdgalgoritmo o una mwdwprocedura e dando vita a quelli che in gergo vengono chiamati mweamweqspaghetti code.
Contents
• Esempi
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Descrizione
Questa istruzione è presente in mwfqFortran, mwfgALGOL, mwfwCOBOL, mwgaSNOBOL, mwgqBASIC, mwggLisp, mwgwC, mwhaC++, mwhqPascal, mwhgPerl, mwhwPHP (dalla versione 5.3) e molti altri meno noti. In mwiaAssembly, ed in generale nei mwiqlinguaggi a basso livello, è un'istruzione fondamentale per controllare il flusso delle istruzioni (ed adattarsi ai linguaggi di programmazione che non ne fanno volutamente uso).
Negli assembly essa corrisponde ad un'istruzione di salto e può essere chiamata con nomi diversi: BRA (da "branch"), JP, JMP o JUMP con tutte le loro varianti condizionali (zero, nonzero, carry, ecc.)
Era molto in voga nei linguaggi (ormai obsoleti) legati al numero di riga, come il mwjaBASIC. La sintassi era:
GOTO numero di riga
Nei mwmwlinguaggi ad alto livello può essere usata per uscire rapidamente da cicli profondamente nidificati. Ai giorni nostri l'uso di questa istruzione in tali linguaggi è generalmente considerato indice di cattiva programmazione (il cosiddetto "mwnaspaghetti code") perché viola le basi della mwnqprogrammazione strutturata.
Come dimostrato dal mwnwteorema di Böhm-Jacopini, un'attenta scrittura del codice può evitare di ricorrere a istruzioni GOTO, anche se è a volte necessario introdurre variabili aggiuntive o un ulteriore costrutto logico. L'assenza di GOTO rende comunque il codice più facile da analizzare.
Tuttavia, in linguaggi che non prevedano le eccezioni oppure nella scrittura di sistemi operativi, i salti incondizionati nel codice possono essere una valida scelta nel caso di mwoqrollback di operazioni o deallocazione di risorse allocate attraverso passi successivi, quando in uno di tali passi si verifichi una condizione di errore. Il codice sorgente del mwogkernel Linux è ricco di GOTO, spesso finalizzati a tale scopo.
Esempi
I seguenti esempi stampano tutti a schermo 10 righe numerate progressivamente
Linguaggio BASIC
Esempio di utilizzo dell'istruzione mwpwgoto
10 LET i = 1
20 PRINT i
30 LET i = i + 1
40 IF i < 10 THEN GOTO 20
Esempio di programmazione strutturata senza mwcggoto
10 LET i = 1
20 DO
30 PRINT i
40 LET i = i + 1
50 LOOP WHILE i < 10
Linguaggio C/C++
Esempio di utilizzo dell'istruzione mwpggoto
int i = 1;
etichetta:
printf("riga %d\n", i++);
if (i < 10) goto etichetta;
Esempio di programmazione strutturata senza mw0qgoto
int i = 1;
do {
printf("riga %d\n", i++);
} while (i < 10);
oppure
for(int i = 0; i < 10; i++)
printf("riga %d\n", i);
Voci correlate
Collegamenti esterni
• citereffoldoc(EN) Denis Howe, goto, in Free On-line Dictionary of Computing. Disponibile con licenza mwasqGFDL
• mwasyGo To Statement Considered harmful (Edsger W. Dijkstra) Testo chiave nelle discussioni sulla mwascprogrammazione strutturata e l'uso del GOTO.